--1.参数列表
--1.1.优惠卷id
local voucherId = ARGV[1];
--1.2.用户id
local userId = ARGV[2];
--1.3.订单id
local orderId =ARGV[3];
--2.定义key
local stockKey = "seckill:stock:" .. voucherId;
local orderKey = "seckill:order:" .. voucherId;

--3.脚本业务
--3.1.判断库存是否充足
local stock = redis.call("get", stockKey)
if not stock or tonumber(stock) <= 0 then
    return 1
end

--3.2.判断用户是否重复下单
if (redis.call("sismember", orderKey, userId) == 1) then
    --用户重复下单
    return 2;
end;
--3.3.扣减库存
redis.call("INCRBY", stockKey, -1);
--3.4.下单保存用户
redis.call("SADD", orderKey, userId);
--3.5.返回结果添加到消息队列
redis.call("XADD", "stream.orders", "*", "userId", userId,  "voucherId", voucherId,  "id", orderId)
return 0;